package dycloud.GameName.mongoDB.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


@Slf4j
@Service
public class MongoDBService {

    @Resource
    private MongoTemplate mongoTemplate;


    /**
     * 方法一：获取当前有哪些数据库集合
     * @return 集合名称列表
     */
    public List<String> getAllCollections() {
        try {
            List<String> collections = mongoTemplate.getDb().listCollectionNames().into(new ArrayList<>());
            log.info("27: success  getAll", collections.size());
            return collections;
        } catch (Exception e) {
            log.error("30: error  getAll", e);
            return Collections.emptyList();  // 返回空列表表示失败
        }
    }



    /**
     * 方法二：获取集合内的数据
     * @param collectionName 集合名称
     * @param entityClass    集合的数据类型（Class）
     * @param <T>            返回的数据类型
     * @return 集合内的数据列表
     */
    public <T> List<T> getCollectionData(String collectionName, Class<T> entityClass) {
        try {
            List<T> data = mongoTemplate.findAll(entityClass, collectionName);
            log.info("47: succees  ", collectionName, data.size());
            return data;
        } catch (Exception e) {
            log.error("50: error", collectionName, e);
            return Collections.emptyList();  // 返回空列表表示失败
        }
    }

    /**
     * 方法三：删除指定集合
     * @param collectionName 集合名称
     * @return 是否成功删除集合
     */
    public boolean deleteCollection(String collectionName) {
        try {
            mongoTemplate.getDb().getCollection(collectionName).drop();
            log.info("63: delete  name --> {}  <----  success", collectionName);
            return true;
        } catch (Exception e) {
            log.error("66: delete  name --> {}  <----  failure", collectionName, e);
            return false;  // 返回 false 表示删除失败
        }
    }


    /**
     * 方法四：删除所有集合
     * @return 是否成功删除所有集合
     */
    public boolean deleteAllCollections() {
        try {
            List<String> collections = mongoTemplate.getDb().listCollectionNames().into(new ArrayList<>());
            for (String collectionName : collections) {
                mongoTemplate.getDb().getCollection(collectionName).drop();
                log.info("81: delete  -->{}<---  sucess ", collectionName);
            }
            log.info("83: delete  all ", collections.size());
            return true;
        } catch (Exception e) {
            log.error("86: delete failure", e);
            return false;  // 返回 false 表示删除失败
        }
    }
}
